/**
 * 
 */
package com.p2p.front.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Service;

import com.p2p.front.dal.dao.BankCardDao;
import com.p2p.front.dal.model.BankCard;
import com.p2p.front.service.BankCardService;
import com.p2p.user.facade.UserQueryFacade;
import com.p2p.user.result.UserQueryResult;
import com.p2p.user.vo.UserInfoFullVO;

/**
 * @author ruiqi
 *
 */
@Service("bankCardService")
public class BankCardServiceImpl implements BankCardService {

	@Resource
	private BankCardDao bankCardDao;

	@Resource
	private UserQueryFacade remoteUserQueryFacade;

	public void saveNewCard(BankCard bankCard) {

		Long currentTime = System.currentTimeMillis();
		bankCard.setAddtime(currentTime);
		bankCard.setUptime(currentTime);
		{
			UserQueryResult userQueryResult = remoteUserQueryFacade
					.getUserInfoById(bankCard.getUid());
			UserInfoFullVO userInfoFullVO = userQueryResult.getUserInfoFullVO();

			String realName = userInfoFullVO.getRealname();

			if (StringUtils.isBlank(realName)) {

			}
			// 其他校验
		}
		bankCardDao.replaceAll(bankCard);
	}

	public void updateCardInfo(BankCard bankCard) {
		BankCard oldBankCard = this.getBankCard(bankCard.getUid(),
				bankCard.getCard());
		Long currentTime = System.currentTimeMillis();
		if (oldBankCard != null) {
			bankCard.setAddtime(oldBankCard.getAddtime());
		} else {
			bankCard.setAddtime(currentTime);
		}
		bankCard.setUptime(currentTime);
		bankCardDao.replaceAll(bankCard);
	}

	public void removeCard(BankCard bankCard) {
		bankCardDao.deleteCard(bankCard);
	}

	public void setDefaultCard(BankCard bankCard) {
		// 设置默认卡需要获取当前默认的卡，更新为非默认，然后再把一张新卡设置为默认，业务简单，但是操作步骤多，且在并发时，会有脏数据，比如有两个卡都被改成默认卡，
		// 为了程序的健壮性，有如下两个选择
		//
		// 方案1、得到需要设置为默认的卡后，直接把用户下面所有的卡批量更新为全部都不是默认卡，然后再更新指定卡为默认卡，这样即使有脏数据，最后也会被订正成正确数据。
		// 方案2、不如直接在user_info里面开个属性，存放默认卡，直接替换，但是user暂时还没有这样的接口，不过以后会有。

		// 方案2比较科学，但是查询默认卡的时候要多查一次。
	}

	public List<BankCard> listAllCardByUser(String userId) {
		return bankCardDao.listAllCardByUser(userId);
	}

	public BankCard getBankCard(String userId, String card) {
		return bankCardDao.getByUserAndCard(userId, card);
	}

	@Override
	public Integer countBankCard(String userId) {
		return bankCardDao.countBankCard(userId);
	}

	@Override
	public BankCard getDefaultBankCard(String userId) {
		return bankCardDao.getDefaultBankCardByUserId(userId);
	}

}
